﻿using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Collections.Generic;
using BussinessLogicTecnoPez;
using BussinessLogicTecnoPez.Produccion.Enfermedades_y_control_de_estanques;
using Tecnopez.Globals;
using Microsoft.Practices.EnterpriseLibrary.Validation;

public partial class Modules_EnfermedadesControlEstanque_ABMEnfermedades : System.Web.UI.Page
{

    private List<CausasEnfermedad> ListaCausas
    {
        get { return ViewState["ListaCausas"] as List<CausasEnfermedad>; }
        set { ViewState["ListaCausas"] = value; }
    }

    private List<SintomasEnfermedad> ListaSintomas
    {
        get { return ViewState["SintomasEnfermedad"] as List<SintomasEnfermedad>; }
        set { ViewState["SintomasEnfermedad"] = value; }
    }

    private GridView grdEnfermedades;
    protected void Page_Load(object sender, EventArgs e)
    {
        grdEnfermedades = TecnopezDataGRIDABMView1.grdDatosAbmView;
        if (IsPostBack == false)
        {
            ListaCausas = new List<CausasEnfermedad>();
            SetMode(PageMode.ListMode);
            //configurarGrilla();
        }
        
        InicializarValidadores();
        InicializarGrilla();
        InicializarGrillaCausas();
        InicializarGrillaSintomas();
        
        cmdEliminar.Attributes.Add("onClick", "return confirm('Esta seguro de eliminar el registro?');");

        GenericMasterPage master = (GenericMasterPage)this.Master;
        master.Imagen = "../Styles/Icons/ic_soporte.gif";
        master.Titulo = "Gestión de enfermedades";
        cargarGrilla();
        _lblError.Text = "";
        lblMessageCausa.Text = "";
        lblMessageCausa.Visible = false;
    }

    private void InicializarGrillaCausas()
    {
        DataControlField[] extraButtons = new DataControlField[1];
        ButtonField colB = new ButtonField();
        colB.ButtonType = ButtonType.Image;
        colB.ImageUrl = Functions.getHost(this.Page) + "Styles/Icons/editdelete.png";
        //colB.HeaderText = "Plan de control";
        colB.CommandName = "Quitar";
        colB.HeaderStyle.Width = 15;
        colB.ItemStyle.HorizontalAlign = HorizontalAlign.Center;
        extraButtons[0] = colB;

        tdgCausas.setupGrid(typeof(CausasEnfermedad), cargarGrillaCausas, true, false, this.ViewState, extraButtons);
        tdgCausas.EmptyDataText = "";
        tdgCausas.ShowHeader = false;
    }

    private void InicializarGrillaSintomas()
    {
        DataControlField[] extraButtons = new DataControlField[1];
        ButtonField colB = new ButtonField();
        colB.ButtonType = ButtonType.Image;
        colB.ImageUrl = Functions.getHost(this.Page) + "Styles/Icons/editdelete.png";
        //colB.HeaderText = "Plan de control";
        colB.CommandName = "Quitar";
        colB.HeaderStyle.Width = 15;
        colB.ItemStyle.HorizontalAlign = HorizontalAlign.Center;
        extraButtons[0] = colB;

        tdgSintomas.setupGrid(typeof(SintomasEnfermedad), cargarGrillaSintomas, true, false, this.ViewState, extraButtons);
        tdgSintomas.EmptyDataText = "";
        tdgSintomas.ShowHeader = false;
    }

    private void InicializarValidadores()
    {
        PPVNombre.SourceTypeName = "BussinessLogicTecnoPez.Produccion.Enfermedades_y_control_de_estanques.Enfermedad";
        PPVNombre.ControlToValidate = "txtNombre";
        PPVNombre.PropertyName = "Nombre";
        PPVNombre.DisplayMode = ValidationSummaryDisplayMode.List;

        PPVNombreCientifico.SourceTypeName = "BussinessLogicTecnoPez.Produccion.Enfermedades_y_control_de_estanques.Enfermedad";
        PPVNombreCientifico.ControlToValidate = "txtNombreCientifico";
        PPVNombreCientifico.PropertyName = "NombreCientifico";
        PPVNombreCientifico.DisplayMode = ValidationSummaryDisplayMode.List;

        PPVDescripcion.SourceTypeName = "BussinessLogicTecnoPez.Produccion.Enfermedades_y_control_de_estanques.Enfermedad";
        PPVDescripcion.ControlToValidate = "txtDescripcion";
        PPVDescripcion.PropertyName = "Descripcion";
        PPVDescripcion.DisplayMode = ValidationSummaryDisplayMode.List;
    }

    private void cargarGrilla()
    {
        Enfermedad.getManager.ClearFilters();
        Enfermedad.getManager.ClearOrders();
        Enfermedad.getManager.AddFilter("NOMBRE", GenericManager<Enfermedad>.filterOperator.Like, "%" + txtBuscarNombre.Text.Trim() + "%");
        Enfermedad.getManager.AddFilter("NOMBRECIENTIFICO", GenericManager<Enfermedad>.filterOperator.Like, "%" + txtBuscarNombreCientifico.Text.Trim() + "%");

        if (ViewState["orden"] == null)
        {
            Enfermedad.getManager.AddOrder("IDENFERMEDAD", GenericManager<Enfermedad>.Order.orderDirection.DESC);
        }
        else
        {
            Enfermedad.getManager.AddOrder(ViewState["orden"].ToString(), (GenericManager<Enfermedad>.Order.orderDirection)ViewState["ordenDireccion"]);

        }

        List<Enfermedad> lista = new List<Enfermedad>();
        lista = Enfermedad.getManager.GetFilter();
        grdEnfermedades.DataSource = lista;
        grdEnfermedades.DataBind();
    }

    private void cargarCausas(int idEnfermedad)
    {
        CausasEnfermedad.getManager.ClearFilters();
        CausasEnfermedad.getManager.ClearOrders();

        CausasEnfermedad.getManager.AddFilter("Enfermedad", GenericManager<CausasEnfermedad>.filterOperator.Equals, idEnfermedad);

        List<CausasEnfermedad> lista= CausasEnfermedad.getManager.GetFilter();

        ListaCausas = lista;

    }

    private void cargarSintomas(int idEnfermedad)
    {
        SintomasEnfermedad.getManager.ClearFilters();
        SintomasEnfermedad.getManager.ClearOrders();

        SintomasEnfermedad.getManager.AddFilter("Enfermedad", GenericManager<SintomasEnfermedad>.filterOperator.Equals, idEnfermedad);

        List<SintomasEnfermedad> lista = SintomasEnfermedad.getManager.GetFilter();

        ListaSintomas = lista;

    }


    private void cargarGrillaCausas()
    {
        if (this.ListaCausas != null)
        {
            tdgCausas.DataSource = this.ListaCausas;
            tdgCausas.DataBind();
            tdgCausas.Visible = true;
        }
        else
        {
            tdgCausas.DataSource = null;
            tdgCausas.DataBind();
            tdgCausas.Visible = false;
        }
    }


    private void cargarGrillaSintomas()
    {
        if (this.ListaSintomas!= null)
        {
            tdgSintomas.DataSource = this.ListaSintomas;
            tdgSintomas.DataBind();
            tdgSintomas.Visible = true;
        }
        else
        {
            tdgSintomas.DataSource = null;
            tdgSintomas.DataBind();
            tdgSintomas.Visible = false;
        }
    }

    private void seleccionarEnfermedad(int o)
    {
        cargarGrilla();
        int IdEnfermedad = int.Parse(grdEnfermedades.DataKeys[o].Value.ToString());
        Enfermedad.getManager.ClearFilters();
        Enfermedad.getManager.AddFilter("IdEnfermedad", BussinessLogicTecnoPez.GenericManager<Enfermedad>.filterOperator.Equals, IdEnfermedad);
        Enfermedad auxEnfermedad = Enfermedad.getManager.GetOne();
        txtID.Text = auxEnfermedad.IdEnfermedad.ToString();
        txtNombre.Text = auxEnfermedad.Nombre.Trim();
        txtNombreCientifico.Text = auxEnfermedad.NombreCientifico.Trim();
        txtDescripcion.Text = auxEnfermedad.Descripcion.ToString();

        cargarCausas(IdEnfermedad);
        cargarSintomas(IdEnfermedad);
        cargarGrillaSintomas();
        cargarGrillaCausas();

        SetMode(PageMode.ViewMode);
    }

    private void SetMode(PageMode mode)
    {
       // System.Threading.Thread.Sleep(1000);
        ViewState["PageMode"] = mode;
        switch (mode)
        {
            case PageMode.ListMode:
                grdEnfermedades.Enabled = true;
                cmdBuscar.Enabled = true;
                cmdNuevo.Enabled = true;
                wzrABM.ActiveStepIndex = 0;
                break;
            case PageMode.NewMode:
                grdEnfermedades.Enabled = false;
                cmdBuscar.Enabled = false;
                cmdNuevo.Enabled = false;
                wzrABM.ActiveStepIndex = 1;
                txtID.Enabled = false;
                txtNombre.Enabled = true;
                txtNombreCientifico.Enabled = true;
                txtDescripcion.Enabled = true;
                cmdAceptar.Visible = true;
                cmdCancelar.Enabled = true;
                cmdEditar.Enabled = false;
                cmdEliminar.Enabled = false;
                txtCausa.Visible = true;
                btnAgregarCausa.Visible = true;
                tdgCausas.Columns[1].Visible = true;
                txtSintoma.Visible = true;
                btnAgregarSintoma.Visible = true;
                tdgSintomas.Columns[1].Visible = true;
                break;
            case PageMode.EditMode:
                grdEnfermedades.Enabled = false;
                cmdBuscar.Enabled = false;
                cmdNuevo.Enabled = false;
                wzrABM.ActiveStepIndex = 1;
                txtID.Enabled = false;
                txtNombre.Enabled = true;
                txtNombreCientifico.Enabled = true;
                txtDescripcion.Enabled = true;
                cmdAceptar.Visible = true;
                cmdCancelar.Enabled = true;
                cmdEditar.Enabled = false;
                cmdEliminar.Enabled = false;
                txtCausa.Visible = true;
                btnAgregarCausa.Visible = true;
                tdgCausas.Columns[1].Visible = true;
                txtSintoma.Visible = true;
                btnAgregarSintoma.Visible = true;
                tdgSintomas.Columns[1].Visible = true;
                break;
            case PageMode.ViewMode:
                grdEnfermedades.Enabled = false;
                cmdBuscar.Enabled = false;
                cmdNuevo.Enabled = false;
                wzrABM.ActiveStepIndex = 1;
                txtID.Enabled = false;
                txtID.ForeColor = System.Drawing.Color.Black;
                txtNombre.Enabled = false;
                txtNombre.ForeColor = System.Drawing.Color.Black;
                txtNombreCientifico.Enabled = false;
                txtNombreCientifico.ForeColor = System.Drawing.Color.Black;
                txtDescripcion.Enabled = false;
                txtDescripcion.ForeColor = System.Drawing.Color.Black;
                cmdAceptar.Visible = false;
                cmdCancelar.Enabled = true;
                cmdEditar.Enabled = true;
                cmdEliminar.Enabled = true;
                txtCausa.Visible = false;
                btnAgregarCausa.Visible = false;
                tdgCausas.Columns[1].Visible = false;
                txtSintoma.Visible = false;
                btnAgregarSintoma.Visible = false;
                tdgSintomas.Columns[1].Visible = false;
                break;
        }

    }

    protected void cmdEditar_Click(object sender, EventArgs e)
    {
        SetMode(PageMode.EditMode);

        cargarGrilla();
        cargarGrillaCausas();
        cargarGrillaSintomas();
    }

    protected void cmdEliminar_Click(object sender, EventArgs e)
    {
        Enfermedad auxEnfermedad = new Enfermedad();
        auxEnfermedad.IdEnfermedad = int.Parse(txtID.Text.Trim());
        int res = Enfermedad.getManager.Delete(auxEnfermedad);
        cargarGrilla();
        cargarGrillaSintomas();
        cargarGrillaCausas();
        SetMode(PageMode.ListMode);
    }

    protected void cmdNuevo_Click(object sender, EventArgs e)
    {
        txtID.Text = "";
        txtNombre.Text = "";
        txtNombreCientifico.Text = "";
        txtDescripcion.Text = "";
        ListaCausas = new List<CausasEnfermedad>();
        cargarGrillaCausas();
        ListaSintomas = new List<SintomasEnfermedad>();
        cargarGrillaSintomas();
        SetMode(PageMode.NewMode);
    }

    protected void cmdAceptar_Click(object sender, EventArgs e)
    {
        try
        {
            Enfermedad auxEnfermedad = new Enfermedad();
            auxEnfermedad.Nombre = txtNombre.Text.Trim();
            auxEnfermedad.NombreCientifico = txtNombreCientifico.Text.Trim();
            auxEnfermedad.Descripcion = txtDescripcion.Text.Trim();
            if (validar(auxEnfermedad))
            {
                if (getMode() == PageMode.NewMode)
                {
                    using (System.Transactions.TransactionScope transaccion = new System.Transactions.TransactionScope(System.Transactions.TransactionScopeOption.RequiresNew, new TimeSpan(0, 30, 0)))
                    {
                        //Inserto la enfermedad
                        if (Enfermedad.getManager.Insert(auxEnfermedad) != true)
                        {
                            throw Enfermedad.getManager.GeneratedException;
                        }
                        //Inserto las causas
                        foreach (CausasEnfermedad item in ListaCausas)
                        {
                            item.Enfermedad = auxEnfermedad;
                            if (CausasEnfermedad.getManager.Insert(item) != true)
                            {
                                throw CausasEnfermedad.getManager.GeneratedException;
                            }
                        }
                        //inserto los sintomas
                        foreach (SintomasEnfermedad item in ListaSintomas)
                        {
                            item.Enfermedad = auxEnfermedad;
                            if (SintomasEnfermedad.getManager.Insert(item) != true)
                            {
                                throw SintomasEnfermedad.getManager.GeneratedException;
                            }
                        }
                        transaccion.Complete();
                    }
                    SetMode(PageMode.ListMode);
                }
                else
                {
                    using (System.Transactions.TransactionScope transaccion = new System.Transactions.TransactionScope(System.Transactions.TransactionScopeOption.RequiresNew, new TimeSpan(0, 30, 0)))
                    {
                        //actualizo enfermedad
                        auxEnfermedad.IdEnfermedad = int.Parse(txtID.Text.ToUpper().Trim());
                        if (Enfermedad.getManager.Update(auxEnfermedad) != true)
                        {
                            throw Enfermedad.getManager.GeneratedException;
                        }
                        //Elimino las causas
                        CausasEnfermedad.getManager.ClearFilters();
                        CausasEnfermedad.getManager.ClearOrders();
                        CausasEnfermedad.getManager.AddFilter("Enfermedad", GenericManager<CausasEnfermedad>.filterOperator.Equals, auxEnfermedad.IdEnfermedad);
                        List<CausasEnfermedad> listaParaEliminarCausas = CausasEnfermedad.getManager.GetFilter();

                        foreach (CausasEnfermedad item in listaParaEliminarCausas)
                        {
                            CausasEnfermedad.getManager.Delete(item);
                        }
                        //inserto las causas
                        foreach (CausasEnfermedad item in ListaCausas)
                        {
                            item.Enfermedad = auxEnfermedad;
                            if (CausasEnfermedad.getManager.Insert(item) != true)
                            {
                                throw CausasEnfermedad.getManager.GeneratedException;
                            }
                        }

                        //Elimino los sintomas
                        SintomasEnfermedad.getManager.ClearFilters();
                        SintomasEnfermedad.getManager.ClearOrders();
                        SintomasEnfermedad.getManager.AddFilter("Enfermedad", GenericManager<SintomasEnfermedad>.filterOperator.Equals, auxEnfermedad.IdEnfermedad);
                        List<SintomasEnfermedad> listaParaEliminarSintomas = SintomasEnfermedad.getManager.GetFilter();

                        foreach (SintomasEnfermedad item in listaParaEliminarSintomas)
                        {
                            SintomasEnfermedad.getManager.Delete(item);
                        }

                        //inserto los sintomas
                        foreach (SintomasEnfermedad item in ListaSintomas)
                        {
                            item.Enfermedad = auxEnfermedad;
                            if (SintomasEnfermedad.getManager.Insert(item) != true)
                            {
                                throw SintomasEnfermedad.getManager.GeneratedException;
                            }
                        }
                    }
                    SetMode(PageMode.ViewMode);
                }
            }
            cargarGrilla();
        }
        catch (Exception exc)
        {
            _lblError.Text = "error: No se pudo realizar la operación";
            Functions.LogError(exc);
            SetMode(PageMode.NewMode);
        }
    }

    protected void cmdCancelar_Click(object sender, EventArgs e)
    {
        SetMode(PageMode.ListMode);
    }

    private void InicializarGrilla()
    {
        TecnopezDataGRIDABMView1.setupGrid<Enfermedad>(cargarGrilla, seleccionarEnfermedad,null,  true, ViewState);
        
    }

    private bool validar(Enfermedad objeto)
    {
        ValidationResults v = Validation.Validate<Enfermedad>(objeto);
        if (!v.IsValid)
        {
            _lblError.Text = "Error en el formulario: Por favor verifique los campos ingresados.";
        }
        return v.IsValid;
     
    }

    private PageMode getMode()
    {
        if (ViewState["PageMode"] == null)
            return PageMode.ModeNotFound;
        return (PageMode)ViewState["PageMode"];
    }

    protected void cmdBuscar_Click(object sender, EventArgs e)
    {

    }
    protected void btnAgregarCausa_Click(object sender, ImageClickEventArgs e)
    {
        foreach (CausasEnfermedad item in ListaCausas)
        {
            if (txtCausa.Text == item.Descripcion)
            {
                this.lblMessageCausa.Text = "Ya existe la causa";
                this.lblMessageCausa.Visible = true;
                return;
            }
        }
        CausasEnfermedad causa = new CausasEnfermedad();
        Enfermedad enfermedad = new Enfermedad();
        //enfermedad.IdEnfermedad=Convert.ToInt32(txtID.Text);
        causa.Descripcion = txtCausa.Text;
        causa.Enfermedad = enfermedad;
        ListaCausas.Add(causa);
        cargarGrillaSintomas();
        cargarGrillaCausas();
        txtCausa.Text = "";
        this.lblMessageCausa.Text = "";
        this.lblMessageCausa.Visible = false;
    }
    protected void tdgCausas_RowDataBound(object sender, GridViewRowEventArgs e)
    {
        
    }
    protected void tdgCausas_RowCommand(object sender, GridViewCommandEventArgs e)
    {
        if (e.CommandName == "Quitar")
        {
            string causa = tdgCausas.Rows[Convert.ToInt32(e.CommandArgument)].Cells[0].Text;

            foreach (CausasEnfermedad item in ListaCausas)
            {
                if (item.Descripcion == causa)
                {
                    ListaCausas.Remove(item);
                    break;
                }
            }
            cargarGrillaSintomas();
            cargarGrillaCausas();
        }
    }
    protected void btnAgregarSintoma_Click(object sender, ImageClickEventArgs e)
    {
        foreach (SintomasEnfermedad item in ListaSintomas)
        {
            if (txtSintoma.Text == item.Descripcion)
            {
                this.lblMessageSintoma.Text = "Ya existe el síntoma";
                this.lblMessageSintoma.Visible = true;
                return;
            }
        }
        SintomasEnfermedad sintoma = new SintomasEnfermedad();
        Enfermedad enfermedad = new Enfermedad();
        //enfermedad.IdEnfermedad=Convert.ToInt32(txtID.Text);
        sintoma.Descripcion = txtSintoma.Text;
        sintoma.Enfermedad = enfermedad;
        ListaSintomas.Add(sintoma);
        cargarGrillaCausas();
        cargarGrillaSintomas();
        txtSintoma.Text = "";
        this.lblMessageSintoma.Text = "";
        this.lblMessageSintoma.Visible = false;
    }
    protected void tdgSintomas_RowCommand(object sender, GridViewCommandEventArgs e)
    {
        if (e.CommandName == "Quitar")
        {
            string sintoma = tdgSintomas.Rows[Convert.ToInt32(e.CommandArgument)].Cells[0].Text;

            foreach (SintomasEnfermedad item in ListaSintomas)
            {
                if (item.Descripcion == sintoma)
                {
                    ListaSintomas.Remove(item);
                    break;
                }
            }
            cargarGrillaSintomas();
            cargarGrillaCausas();
        }
    }
}
